//引入user对象,主要是储存注册的信息，和寻找登录用户的信息
var User = require('../models/user');
//引入post对象。。用于发表的信息
var Post = require('../models/post');
//引入密码的第三方模块
var crypto = require('crypto');

//权限的判断
//如果用户没有登录，则不能访问发表和退出页面
function checkLogin(req,res,next){
  if(!req.session.user){
    req.flash('error','未登录');
    return res.redirect('/login');
  }
  next();
}
//如果用户登录了，则不能访问登录和注册页面
function checkNotLogin(req,res,next){
  if(req.session.user){
    req.flash('error','已经登录了');
    return res.redirect('/');
  }
  next();
}

module.exports = function(app){
  //所有的路由操作都放在这里
  //首页
  app.get('/',function(req,res){
    Post.get(null,function(err,posts){
        if(err){
          posts = [];
        }
        res.render('index',{
          title:'首页',
          user:req.session.user,
          posts:posts,
          success:req.flash('success').toString(),
          error:req.flash('error').toString()
        })
    });

  });
  //注册
  app.get('/reg',checkNotLogin);
  app.get('/reg',function(req,res){
    res.render('reg',{
      title:'注册',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  });
  //注册提交
  app.post('/reg',function(req,res){
    //1.收集数据
    //2.判断两次密码是否一样
    //3.对密码进行加密处理
    //4.最后将收集好的数据整理完毕
    //5.判断用户名是否存在
    //6.如果不存在，说明可以进行操作，那么就开始新增用户操作
    //7.新增后，将用户信息放入session当中
    var name = req.body.name;
    var password = req.body.password;
    var password_re = req.body['password-repeat'];
    if(password != password_re){
      req.flash('error','两次输入的密码不一致');
      res.redirect('/reg');
    }
    var md5 = crypto.createHash('md5');
    var password = md5.update(req.body.password).digest('hex');
    var newUser = new User({
      name:name,
      password:password,
      email:req.body.email
    });
    //调用user.js中定义的回调函数，
    User.get(newUser.name,function(err,user){
      if(err){
        req.flash('error',err);
        // res.redirect是后台服务器跳转到指定页面的方法！！！
        return res.redirect('/reg');
      }
      if(user){
        req.flash('error','用户名已经存在，不要重复注册');
        return res.redirect('/reg');
      }
      newUser.save(function(err){
        if(err){
          req.flash('error',err);
          return res.redirect('/reg');
        }
        req.session.user = newUser;
        req.flash('success','注册成功');
        return res.redirect('/');
      })
    })
  });
  //登录页面
  app.get('/login',checkNotLogin);
  app.get('/login',function(req,res){
    res.render('login',{
      title:'登录',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  });
  app.post('/login',function(req,res){
/*  //1.首先先生成密码的md5值
    //2.判断一下用户名是否存在
    //3.判断一下密码是否正确
    //4.将登陆的用户的信息存入session，然后跳转到首页*/
    var md5 = crypto.createHash('md5');
    var password = md5.update(req.body.password).digest('hex');
    //调用user.js中的回调函数
    User.get(req.body.name,function(err,user){
      if(err){
        req.flash('error','用户名已经存在');
        return res.redirect('/login');
      }
      if(!user){
        //用户名不存在的情况下
        req.flash('error','用户名不存在');
        return res.redirect('/login');
      }
      if(user.password != password){
        req.flash('error','密码错误,请重新输入');
        return res.redirect('/login');
      }
      req.session.user = user;
      req.flash('success','登陆成功');
      return res.redirect('/');
    })

  });
  //退出
  app.get('/logout',checkLogin);
  app.get('/logout',function(req,res){
    req.session.user = null;
    req.flash('success','退出成功');
    return res.redirect('/');
  });
  //发表
  app.get('/post',checkLogin);
  app.get('/post',function(req,res){
    res.render('post',{
      title:'发表',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  });
  app.post('/post',function(req,res){
    /*数据收集
    * 数据保存
    * 跳转到首页*/
    var currentUser = req.session.user.name;
    var post = new Post(currentUser,req.body.title,req.body.post,req.ip);
    post.save(function(err){
      if(err){
        req.flash('error',err);
        return res.redirect('/');
      }
      req.flash('success','发表成功');
      res.redirect('/')
    })
  })
};